home *** CD-ROM | disk | FTP | other *** search
/ Technotools / Technotools (Chestnut CD-ROM)(1993).ISO / editors / tscredd2 / scrdisk5.exe / arc / DEMOWIND.PAS < prev    next >
Pascal/Delphi Source File  |  1990-04-16  |  50KB  |  2,136 lines

  1. {$M 30000,0,198000}
  2. Uses Dos,Crt,
  3.      ScrEdit,
  4.      Windows,
  5.      ScrMouse;
  6.  
  7. Type
  8. ScrEditConfigType = Record
  9.     MenuLiteBg,
  10.     MenuLiteFg,
  11.     MenuNameBg,
  12.     MenuNameFg,
  13.     MenuBorderBg,
  14.     MenuBorderFg,
  15.     MenuTextBg,
  16.     MenuTextFg,
  17.     MenuSelectBg,
  18.     MenuSelectFg,
  19.     MenuErrorBg,
  20.     MenuErrorFg,
  21.     MenuBarBg,
  22.     MenuBarFg: Byte;
  23.  
  24.     PopUpBorderBg,
  25.     PopUpBorderFg,
  26.     PopUpTextBg,
  27.     PopUpTextFg,
  28.     PopUpFootBg,
  29.     PopUpFootFg,
  30.     PopUpBarBg,
  31.     PopUpBarFg: Byte;
  32.  
  33.     ChgName,
  34.     ChgFooter : String[30];
  35.     ChgNameBg,
  36.     ChgNameFg,
  37.     ChgNamePos,
  38.     ChgBorderBg,
  39.     ChgBorderFg,
  40.     ChgBorderStyle,
  41.     ChgFootBg,
  42.     ChgFootFg,
  43.     ChgFootPos,
  44.     ChgTextBg,
  45.     ChgTextFg :Byte;
  46.     End;
  47. Var
  48. ConfigRec    : ScrEditConfigType;
  49. WorkStr      : S_Str80;
  50. WindowNo,
  51. WindowRow,
  52. WindowCol,
  53. WindowLength,
  54. WindowLines : Integer;
  55.  
  56. BorderStyle,
  57. BorderBg,
  58. BorderFg      :Byte;
  59.  
  60. WindowName    :S_Str80;
  61. WindowNameBg,
  62. WindowNameFg,
  63. WindowNamePos :Byte;
  64. WindowFoot    :S_Str80;
  65. WindowFootBg,
  66. WindowFootFg,
  67. WindowFootPos,
  68. TextBg,
  69. TextFg   :Byte;
  70.  
  71. X,Y,Z,
  72. PrevOption,
  73. NewLine,
  74. LastLine,
  75. CurrentCol,
  76. DemoOption,
  77. ColorOption,
  78. MainOption : Integer;
  79.  
  80. DoMouse     : Boolean;
  81. Menus       : Array[1..100] of Integer;
  82. Holdscreen  : Array[1..4000] of Char;
  83.  
  84. Const
  85. WindowActive: Boolean = False;
  86.  
  87. MenuBarItems          = 4;
  88. MenuBarSpacing        = '   ';
  89. MenuBarStr : S_Str80  = '';
  90. MenuBarFields  : Array[1..MenuBarItems] of String =
  91.    ('General Demo',
  92.     'Data Entry',
  93.     'Color Changes',
  94.     'Quit');
  95.  
  96. MenuBarLines: Array[1..MenuBarItems]   of Integer = (12,0,4,0);
  97.  
  98. DemoMenu : Array[1..12] of String[30] =
  99.            (' Fast video mode is now <OFF>',
  100.             ' Open & shut 50 windows',
  101.             ' Moving a window',
  102.             ' Dragging a window',
  103.             ' Moving several windows',
  104.             ' Writing lines to windows',
  105.             ' Writing with scrollings',
  106.             ' Reading lines from windows',
  107.             ' Shuffling windows',
  108.             ' Popping windows',
  109.             ' Changing backgrounds',
  110.             ' Standard I/O');
  111.  
  112. ColorMenu: Array[1..4] of String[8] =
  113.            ('Border','Name','Footer','Text');
  114.  
  115.  
  116.  
  117.  
  118. Procedure Initialize;
  119. Begin
  120. If  S_BW Then
  121.     With ConfigRec Do
  122.         Begin
  123.         MenuLiteBg    := 7;
  124.         MenuLiteFg    := 0;
  125.         MenuNameBg    := 7;
  126.         MenuNameFg    := 0;
  127.         MenuBorderBg  := 0;
  128.         MenuBorderFg  := 7;
  129.         MenuTextBg    := 0;
  130.         MenuTextFg    := 7;
  131.         MenuBarBg     := 0;
  132.         MenuBarFg     := 7;
  133.         MenuSelectBg  := 7;
  134.         MenuSelectFg  := 0;
  135.         PopUpBorderBg := 0;
  136.         PopUpBorderFg := 15;
  137.         PopUpTextBg   := 0;
  138.         PopUpTextFg   := 7;
  139.         PopUpFootBg   := 7;
  140.         PopUpFootFg   := 0;
  141.         PopUpBarBg    := 7;
  142.         PopUpBarFg    := 0;
  143.         ChgName       := 'Name';
  144.         ChgFooter     := 'Footer';
  145.         ChgNameBg     := LightGray;
  146.         ChgNameFg     := Black;
  147.         ChgNamePos    := 3;
  148.         ChgBorderBg   := Black;
  149.         ChgBorderFg   := White;
  150.         ChgBorderStyle:= 3;
  151.         ChgFootBg     := LightGray;
  152.         ChgFootFg     := Black;
  153.         ChgFootPos    := 3;
  154.         ChgTextBg     := Black;
  155.         ChgTextFg     := White;
  156.         End
  157. Else
  158.     With ConfigRec Do
  159.         Begin
  160.         MenuLiteBg    := LightGray;
  161.         MenuLiteFg    := Blue;
  162.         MenuNameBg    := 0;
  163.         MenuNameFg    := 0;
  164.         MenuBorderBg  := Green;
  165.         MenuBorderFg  := Black;
  166.         MenuTextBg    := Blue;
  167.         MenuTextFg    := Cyan;
  168.         MenuBarBg     := 0;
  169.         MenuBarFg     := 0;
  170.         MenuSelectBg  := 0;
  171.         MenuSelectFg  := 0;
  172.         PopUpBorderBg := LightGray;
  173.         PopUpBorderFg := Blue;
  174.         PopUpTextBg   := Blue;
  175.         PopUpTextFg   := Cyan;
  176.         PopUpFootBg   := LightGray;
  177.         PopUpFootFg   := Blue;
  178.         PopUpBarBg    := LightGray;
  179.         PopUpBarFg    := Blue;
  180.         ChgName       := 'Name';
  181.         ChgFooter     := 'Footer';
  182.         ChgNameBg     := LightGray;
  183.         ChgNameFg     := Black;
  184.         ChgNamePos    := 3;
  185.         ChgBorderBg   := Black;
  186.         ChgBorderFg   := White;
  187.         ChgBorderStyle:= 3;
  188.         ChgFootBg     := LightGray;
  189.         ChgFootFg     := Black;
  190.         ChgFootPos    := 3;
  191.         ChgTextBg     := Black;
  192.         ChgTextFg     := White;
  193.         End;
  194.  
  195. End;
  196.  
  197.  
  198.  
  199.  
  200.  
  201.  
  202.  
  203.  
  204.  
  205.  
  206.  
  207.  
  208.  
  209.  
  210.  
  211. Procedure RandomWindows(Count:Integer);
  212. Const
  213. ColorSets : Array[1..8,1..7] of Byte =
  214.           ((3,LightGray,  Black,   LightGray,White,  Black,White),
  215.            (2,Blue,       Cyan,    Blue,     White,  Blue, Cyan),
  216.            (3,Black,      Yellow,  Green,    Yellow, Black, Yellow),
  217.            (2,Green,      Black,   Green,    Yellow, Green, White),
  218.            (1,Red,        Yellow,  Red,      Yellow, Red,   White),
  219.            (3,Brown,      Yellow,  LightGray,White,  Brown, White),
  220.            (1,Magenta,    Yellow,  Magenta,  White,  Magenta, Black),
  221.            (2,Blue,       Black,   LightGray,Blue,   LightGray, Black));
  222.  
  223. Begin
  224. For X := 1 to Count Do
  225.     Begin
  226.     Repeat WindowRow    := Random(21); Until WindowRow In [1..20];
  227.     Repeat WindowCol    := Random(60); Until WindowCol In [1..65];
  228.     Repeat WindowLength := Random(80-WindowCol);
  229.                                        Until WindowLength In [10..40];
  230.     Repeat WindowLines  := Random(15); Until WindowLines In [3..12];
  231.  
  232.     Str(X:2,WindowName);
  233.     WindowName          := 'Window '+ WindowName;
  234.     Repeat WindowNamePos:= Random(3); Until WindowNamePos in [1..3];
  235.  
  236.     WindowFoot          := WindowName;
  237.     Repeat WindowFootPos:= Random(3); Until WindowFootPos in [1..3];
  238.  
  239.     BorderStyle  := ColorSets[(X Mod 6)+1,1];
  240.     BorderBg     := ColorSets[(X Mod 6)+1,2];
  241.     BorderFg     := ColorSets[(X Mod 6)+1,3];
  242.     WindowNameBg := ColorSets[(X Mod 6)+1,4];
  243.     WindowNameFg := ColorSets[(X Mod 6)+1,5];
  244.     WindowFootBg := ColorSets[(X Mod 6)+1,4];
  245.     WindowFootFg := ColorSets[(X Mod 6)+1,5];
  246.     TextBg       := ColorSets[(X Mod 6)+1,6];
  247.     TextFg       := ColorSets[(X Mod 6)+1,7];
  248.  
  249.     Menus[X+3] := DefineWindow(WindowRow,WindowCol,WindowLength,WindowLines,
  250.                       BorderStyle,BorderBg,BorderFg,
  251.                       WindowName,WindowNameBg,WindowNameFg,WindowNamePos,
  252.                       WindowFoot,WindowNameBg,WindowNameFg,WindowFootPos,
  253.                       TextBg,TextFg);
  254.     End;
  255. WindowName    := '';
  256. WindowNamePos := 0;
  257. WindowFoot    := '';
  258. WindowFootPos := 0;
  259. End;
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.  
  267.  
  268.  
  269.  
  270.  
  271.  
  272.  
  273. Procedure BuildOneWindow(N,R,C,W,L:Integer);
  274. Begin
  275. With ConfigRec Do
  276.     Begin
  277.     WindowRow      := R;
  278.     WindowCol      := C;
  279.     WindowLength   := W;
  280.     WindowLines    := L;
  281.     BorderStyle    := 2;
  282.  
  283.     Menus[N] := DefineWindow(WindowRow,WindowCol,WindowLength,WindowLines,
  284.                              BorderStyle,PopUpBorderBg,PopUpBorderFg,
  285.                              WindowName,PopUpFootBg,PopUpFootFg,WindowNamePos,
  286.                              WindowFoot,PopUpFootBg,PopUpFootFg,WindowFootPos,
  287.                              PopUpTextBg,PopUpTextFg);
  288.     End;
  289. End;
  290.  
  291.  
  292.  
  293.  
  294.  
  295.  
  296.  
  297.  
  298.  
  299.  
  300.  
  301.  
  302.  
  303.  
  304.  
  305.  
  306.  
  307. Procedure BuildMainMenu;
  308. Const
  309. LeftA  = #27;
  310. RightA = #26;
  311. UpA    = #24;
  312. DnA    = #25;
  313. Begin
  314.  
  315. For X := 1 to MenuBarItems Do
  316.     MenuBarStr := MenuBarStr + MenuBarSpacing + MenuBarFields[X];
  317.  
  318. If  S_MouseInstalled Then
  319.     MenuBarStr := MenuBarStr+'  Mouse:YES  Use:<ENTER> '+LeftA+' '+ RightA
  320. Else
  321.     MenuBarStr := MenuBarStr+'  Mouse:NO   Use:<ENTER> '+LeftA+' '+ RightA;
  322.  
  323. With ConfigRec Do
  324.     Begin
  325.     WindowRow      := 1;
  326.     WindowCol      := 1;
  327.     WindowLength   := 80;
  328.     WindowLines    := 1;
  329.     BorderStyle    := 0;
  330.     WindowName     := '';
  331.     WindowNamePos  := 0;
  332.     WindowFoot     := '';
  333.     WindowFootPos  := 0;
  334.  
  335.     Menus[1] := DefineWindow(WindowRow,WindowCol,WindowLength,WindowLines,
  336.                             BorderStyle,MenuBorderBg,MenuBorderFg,
  337.                             WindowName,MenuNameBg,MenuNameFg,WindowNamePos,
  338.                             WindowFoot,WindowFootBg,WindowFootFg,WindowFootPos,
  339.                             MenuTextBg,MenuTextFg);
  340.     WindowNamePos := 0;
  341.     WriteWindowLine('',Menus[1],1,W_Off,0,MenuBarBg,MenuBarFg,MenuBarStr);
  342.  
  343.     WindowRow      := 2;
  344.     WindowCol      := Pos(MenuBarFields[1],MenuBarStr) - 1;
  345.     WindowFoot     := 'Use <ENTER> '+UpA+' '+DnA+' '+LeftA+' '+RightA;
  346.     WindowFootPos  := 3;
  347.     WindowLength   := 30;
  348.     WindowLines    := 12;
  349.     BorderStyle    := 3;
  350.  
  351.     Menus[2] := DefineWindow(WindowRow,WindowCol,WindowLength,WindowLines,
  352.                              BorderStyle,PopUpBorderBg,PopUpBorderFg,
  353.                              '',0,0,0,
  354.                              WindowFoot,PopUpFootBg,PopUpFootFg,WindowFootPos,
  355.                              PopUpTextBg,PopUpTextFg);
  356.     For X := 1 to 12 do
  357.         WriteWindowLine('',Menus[2],X,W_Off,0,0,0,DemoMenu[X]);
  358.  
  359.     WindowName     := '';
  360.     WindowNamePos  := 0;
  361.     WindowFoot     := '';
  362.     WindowFootPos  := 0;
  363.     WindowCol      := Pos(MenuBarFields[3],MenuBarStr) - 1;
  364.     WindowFoot     := '';
  365.     WindowLength   := 9;
  366.     WindowLines    := 4;
  367.     BorderStyle    := 3;
  368.  
  369.     Menus[3] := DefineWindow(WindowRow,WindowCol,WindowLength,WindowLines,
  370.                              BorderStyle,PopUpBorderBg,PopUpBorderFg,
  371.                              '',0,0,0,
  372.                              WindowFoot,PopUpFootBg,PopUpFootFg,WindowFootPos,
  373.                              PopUpTextBg,PopUpTextFg);
  374.     For X := 1 to 4 do
  375.         WriteWindowLine('',Menus[3],X,W_Off,0,0,0,ColorMenu[X]);
  376.     End;
  377. End;
  378.  
  379.  
  380.  
  381.  
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393. Procedure GetNextKey;
  394. Begin
  395. DoMouse := False;
  396. S_NextKey;
  397.  
  398. If  S_MouseEvent Then
  399.     Begin
  400.     S_AnalizeMouse;
  401.     If  S_MsRow = 1 Then
  402.         Begin
  403.  
  404.         Case S_MsCol of
  405.              4..15 : Begin
  406.                      DoMouse    := True;
  407.                      MainOption := 1;
  408.                      If  CurrentCol In [4..15] Then
  409.                          S_Enter := True
  410.                      Else
  411.                          CurrentCol := S_MsCol;
  412.                      End;
  413.             19..28 : Begin
  414.                      DoMouse := True;
  415.                      MainOption := 2;
  416.                      If  CurrentCol In [19..28] Then
  417.                          S_Enter := True
  418.                      Else
  419.                          CurrentCol := S_MsCol;
  420.                      End;
  421.             33..44 : Begin
  422.                      DoMouse := True;
  423.                      MainOption := 3;
  424.                      If  CurrentCol In [33..44] Then
  425.                          S_Enter := True
  426.                      Else
  427.                          CurrentCol := S_MsCol;
  428.                      End;
  429.             48..51 : Begin
  430.                      DoMouse := True;
  431.                      MainOption := 4;
  432.                      If  CurrentCol In [48..51] Then
  433.                          S_Enter := True
  434.                      Else
  435.                          CurrentCol := S_MsCol;
  436.                      End;
  437.             End;
  438.         End;
  439.     If  (WindowActive) Then
  440.         If  (MainOption = 1)     And
  441.             (S_MsRow In [3..15]) And
  442.             (S_MsCol in [4..29]) Then
  443.             Begin
  444.             S_Enter  := True;
  445.             NewLine := S_MsRow - 2;
  446.             End;
  447.         If  (MainOption = 3)     And
  448.             (S_MsRow In [3..6])  And
  449.             (S_MsCol in [32..44]) Then
  450.             Begin
  451.             S_Enter  := True;
  452.             NewLine  := S_MsRow - 2;
  453.             End;
  454.     S_ResetMouseFlags;
  455.     End;
  456. End;
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.  
  465.  
  466.  
  467.  
  468.  
  469.  
  470.  
  471.  
  472. Procedure ChangeWindowDemo;
  473. Var PassStr,TextStr:S_Str80;
  474.     Row,Col,Typ,Len,
  475.     NewValue,
  476.     Offset ,
  477.     Pos_Style,
  478.     Bg,
  479.     Fg     : Integer;
  480. Const
  481. Text1 : Array[1..11] of String[40]=
  482.         ('  This procedure will demonstrate how to ',
  483.          '  change the windows visable attributes:',
  484.          '',
  485.          '  - Change the windows border style and ',
  486.          '    colors.',
  487.          '',
  488.          '  - Change the Heading and footer text,',
  489.          '    position, and colors.',
  490.          '',
  491.          '  - Change the Text background and',
  492.          '    forground colors.');
  493.  
  494. Text2 : Array[1..20] of String[30] =
  495.        ('Border',
  496.         '',
  497.         ' Style............(1..3)[    ]',
  498.         ' BackGround.......(0..7)[    ]',
  499.         ' ForeGround.......(0.15)[    ]',
  500.         'Window Name',
  501.         ' Text:[                      ]',
  502.         ' Position.........(0..3)[    ]',
  503.         ' BackGround.......(0..7)[    ]',
  504.         ' ForeGround.......(0.15)[    ]',
  505.         'Window Footer',
  506.         ' Text:[                      ]',
  507.         ' Position.........(0..3)[    ]',
  508.         ' BackGround.......(0..7)[    ]',
  509.         ' ForeGround.......(0.15)[    ]',
  510.         'Text',
  511.         '',
  512.         '',
  513.         ' BackGround.......(0..7)[    ]',
  514.         ' ForeGround.......(0.15)[    ]');
  515. Begin
  516.  
  517. S_HideMouse;
  518. S_SetMouseEvent('00000000');
  519.  
  520. OffSet := (((LastLine - 1)*5)+1);
  521.  
  522.  
  523. With ConfigRec Do
  524.     Menus[4] := DefineWindow(7,37,40,11,
  525.                   ChgBorderStyle,ChgBorderBg,ChgBorderFg,
  526.                   ChgName,ChgNameBg,ChgNameFg,ChgNamePos,
  527.                   ChgFooter,ChgFootBg,ChgFootFg,ChgFootPos,
  528.                   ChgTextBg,ChgTextFg);
  529.  
  530. WindowName    := Text2[OffSet];
  531. WindowNamePos := 1;
  532. WindowFoot    := '<ESC> to Quit';
  533. WindowFootPos := 1;
  534.  
  535. BuildOneWindow(5,11,7,30,4);
  536.  
  537. WindowName    := '';
  538. WindowNamePos := 0;
  539. WindowFoot    := '';
  540. WindowFootPos := 0;
  541.  
  542. For X := 1 to 4 Do
  543.     WriteWindowLine('',5,X,W_Off,0,0,0,Text2[OffSet + X]);
  544.  
  545. For X := 1 to 11 Do
  546.     WriteWindowLine('',4,X,W_Off,0,0,0,Text1[X]);
  547.  
  548.  
  549. OpenWindow('',4);
  550. OpenWindow('',5);
  551.  
  552. X := 1;
  553.  
  554. Repeat
  555.  
  556.    With ConfigRec Do
  557.       Begin
  558.       Case LastLine Of
  559.         2 : PassStr := ChgName;
  560.         3 : PassStr := ChgFooter;
  561.         Else
  562.             PassStr := '';
  563.         End;
  564.  
  565.       WriteWindowField('',5,1,8,9,20,
  566.              PopUpTextBg,PopUpTextFg,
  567.              PopUpTextBg,PopUpTextFg,PassStr);
  568.  
  569.       Case LastLine Of
  570.         1 : Str(ChgBorderStyle:2,PassStr);
  571.         2 : Str(ChgNamePos:2,PassStr);
  572.         3 : Str(ChgFootPos:2,PassStr);
  573.         Else
  574.             PassStr := '';
  575.         End;
  576.  
  577.       WriteWindowField('',5,2,26,0,2,
  578.              PopUpTextBg,PopUpTextFg,
  579.              PopUpTextBg,PopUpTextFg,PassStr);
  580.  
  581.       Case LastLine Of
  582.         1 : Str(ChgBorderBg:2,PassStr);
  583.         2 : Str(ChgNameBg:2,PassStr);
  584.         3 : Str(ChgFootBg:2,PassStr);
  585.         4 : Str(ChgTextBg:2,PassStr);
  586.         End;
  587.  
  588.       WriteWindowField('',5,3,26,0,2,
  589.             PopUpTextBg,PopUpTextFg,
  590.             PopUpTextBg,PopUpTextFg,PassStr);
  591.  
  592.       Case LastLine Of
  593.         1 : Str(ChgBorderFg:2,PassStr);
  594.         2 : Str(ChgNameFg:2,PassStr);
  595.         3 : Str(ChgFootFg:2,PassStr);
  596.         4 : Str(ChgTextFg:2,PassStr);
  597.         End;
  598.  
  599.       WriteWindowField('',5,4,26,0,2,
  600.            PopUpTextBg,PopUpTextFg,
  601.            PopUpTextBg,PopUpTextFg,PassStr);
  602.  
  603.       Case LastLine of
  604.          1: Begin
  605.             If X < 3 Then
  606.                Begin
  607.                Str(ChgBorderStyle:2,PassStr);
  608.                X   := 2;
  609.                Row := 2;
  610.                End;
  611.             If X = 3 Then
  612.                Begin
  613.                Str(ChgBorderBg:2,PassStr);
  614.                Row := 3;
  615.                End;
  616.             If X = 4 Then
  617.                Begin
  618.                Str(ChgBorderFg:2,PassStr);
  619.                Row := 4;
  620.                End;
  621.             Col     := 26;
  622.             Typ     := 0;
  623.             Len     := 2;
  624.             End;
  625.          2: Begin
  626.             If  X = 1 Then
  627.                 Begin
  628.                 PassStr := ChgName;
  629.                 Row     := 1;
  630.                 Col     := 8;
  631.                 Typ     := 9;
  632.                 Len     := 20;
  633.                 End
  634.             Else
  635.                 Begin
  636.                 If X = 2 Then
  637.                    Begin
  638.                    Str(ChgNamePos:2,PassStr);
  639.                    X   := 2;
  640.                    Row := 2;
  641.                    End;
  642.                 If X = 3 Then
  643.                    Begin
  644.                    Str(ChgNameBg:2,PassStr);
  645.                    Row := 3;
  646.                    End;
  647.                 If X = 4 Then
  648.                    Begin
  649.                    Str(ChgNameFg:2,PassStr);
  650.                    Row := 4;
  651.                    End;
  652.                 Col     := 26;
  653.                 Typ     := 0;
  654.                 Len     := 2;
  655.                 End;
  656.             End;
  657.          3: Begin
  658.             If  X = 1 Then
  659.                 Begin
  660.                 PassStr := ChgFooter;
  661.                 Row     := 1;
  662.                 Col     := 8;
  663.                 Typ     := 9;
  664.                 Len     := 20;
  665.                 End
  666.             Else
  667.                 Begin
  668.                 If X = 2 Then
  669.                    Begin
  670.                    Str(ChgFootPos:2,PassStr);
  671.                    X   := 2;
  672.                    Row := 2;
  673.                    End;
  674.                 If X = 3 Then
  675.                    Begin
  676.                    Str(ChgFootBg:2,PassStr);
  677.                    Row := 3;
  678.                    End;
  679.                 If X = 4 Then
  680.                    Begin
  681.                    Str(ChgFootFg:2,PassStr);
  682.                    Row := 4;
  683.                    End;
  684.                 Col     := 25;
  685.                 Typ     := 0;
  686.                 Len     := 2;
  687.                 End;
  688.             End;
  689.          4: Begin
  690.             If X < 4 Then
  691.                Begin
  692.                X := 3;
  693.                Str(ChgTextBg:2,PassStr);
  694.                Row := 3;
  695.                End;
  696.             If X = 4 Then
  697.                Begin
  698.                Str(ChgTextFg:2,PassStr);
  699.                Row := 4;
  700.                End;
  701.             Col     := 26;
  702.             Typ     := 0;
  703.             Len     := 2;
  704.             End;
  705.          End;
  706.  
  707.       End;
  708.  
  709.  
  710.  
  711.    PauseWindowUpdates(False);
  712.  
  713.    With ConfigRec Do
  714.        ReadWindowField('',5,Row,Col,Typ,Len,PopUpBarBg,PopUpBarFg,PassStr);
  715.    Val(PassStr,NewValue,Y);
  716.  
  717.    PauseWindowUpdates(True);
  718.  
  719.    With ConfigRec Do
  720.        Begin
  721.        Case LastLine Of
  722.            1 : Begin
  723.                Case X Of
  724.                    2 : ChgBorderStyle := NewValue;
  725.                    3 : ChgBorderBg    := NewValue;
  726.                    4 : ChgBorderFg    := NewValue;
  727.                    End;
  728.                End;
  729.            2 : Begin
  730.                Case X Of
  731.                    1 : ChgName    := PassStr;
  732.                    2 : ChgNamePos := NewValue;
  733.                    3 : ChgNameBg  := NewValue;
  734.                    4 : ChgNameFg  := NewValue;
  735.                    End;
  736.                End;
  737.            3 : Begin
  738.                Case X Of
  739.                    1 : ChgFooter  := PassStr;
  740.                    2 : ChgFootPos := NewValue;
  741.                    3 : ChgFootBg  := NewValue;
  742.                    4 : ChgFootFg  := NewValue;
  743.                    End;
  744.                End;
  745.            4 : Begin
  746.                Case X Of
  747.                    3 : ChgTextBg  := NewValue;
  748.                    4 : ChgTextFg  := NewValue;
  749.                    End;
  750.                End;
  751.            End;
  752.        ChangeWindow('',4,
  753.                    ChgBorderStyle,ChgBorderBg,ChgBorderFg,
  754.                    ChgName,ChgNameBg,ChgNameFg,ChgNamePos,
  755.                    ChgFooter,ChgFootBg,ChgFootFg,ChgFootPos,
  756.                    ChgTextBg,ChgTextFg);
  757.        End;
  758.  
  759.    If  (S_Up)  Then
  760.        Begin
  761.        S_Tab   := True;
  762.        S_Shift := True;
  763.        End;
  764.  
  765.    If  (S_Down) Then
  766.        S_Tab := True;
  767.  
  768.    If  (S_Tab) Then
  769.        If  S_Shift Then
  770.            Dec(X)
  771.        Else
  772.            Inc(X);
  773.  
  774.    Case LastLine Of
  775.      1   : If   X > 4      Then X := 2
  776.            Else If  X < 2  Then X := 4;
  777.      2..3: If   X > 4      Then X := 1
  778.            Else If  X < 1  Then X := 4;
  779.      4   : If   X > 4      Then X := 3
  780.            Else If  X < 3  Then X := 4;
  781.      End;
  782.  
  783.  
  784.  
  785. Until S_Esc;
  786.  
  787. EraseWindow('',4);
  788. EraseWindow('',5);
  789. S_ReSetKeyFlags;
  790. S_ReSetMouseFlags;
  791. S_SetMouseEvent('01000000');
  792. S_ShowMouse;
  793. End;
  794.  
  795.  
  796.  
  797.  
  798.  
  799.  
  800.  
  801.  
  802.  
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813. Procedure DataEntryDemo;
  814. Var
  815.  PassStr:S_Str80;
  816.  Months : Array[1..12] of LongInt;
  817.  Row, Col, Mth,
  818.  Range,
  819.  Amount : LongInt;
  820. Const
  821. Graph : Array[1..19] of S_Str80 =
  822.    ('                     ** 1989 Bakery Sales **                      ',
  823.     '──────────────────────────────────────────────────────────────────',
  824.     '     +    -                                               -   +   ',
  825.     'G 110,000 -                                               -110,000',
  826.     'r         -                                               -       ',
  827.     'o  90,000 -                                               - 90,000',
  828.     's         -                                               -       ',
  829.     's  70,000 -                                               - 70,000',
  830.     '          -                                               -       ',
  831.     'S  50,000 -                                               - 50,000',
  832.     'a         -                                               -       ',
  833.     'l  30,000 -                                               - 30,000',
  834.     'e         -                                               -       ',
  835.     's  10,000 -                                               - 10,000',
  836.     '──────────────────────────────────────────────────────────────────',
  837.     '           Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec        ',
  838.     '──────────────────────────────────────────────────────────────────',
  839.     'Jan 120000 Feb 110000 Mar 100000 Apr 90000  May 80000  Jun 70000  ',
  840.     'Jul 60000  Aug 50000  Sep 40000  Oct 30000  Nov 20000  Dec 10000  ');
  841. Begin
  842.  
  843. S_HideMouse;
  844. S_SetMouseEvent('00000000');
  845.  
  846. WindowFoot := '<ENTER> = redraw graph      <ESC> = exit';
  847. WindowFootPos := 3;
  848.  
  849. BuildOneWindow(4,2,4,70,19);
  850.  
  851. WindowFootPos := 0;
  852.  
  853. Range := 120000;
  854. For X := 1 to 19 Do
  855.     Begin
  856.     If  X < 13 Then Months[X] := Range;
  857.     Range     := Range - 10000;
  858.     If  X In [1..2,15..19] Then
  859.         WriteWindowLine('',4,X,W_OFF,0,0,0,Graph[X])
  860.     Else
  861.         WriteWindowLine('',4,X,W_OFF,0,ConfigRec.PopUpTextBg,15,Graph[X]);
  862.     End;
  863.  
  864. OpenWindow('',4);
  865.  
  866. Row     := 18;
  867. Col     := 0;
  868. Mth     := 1;
  869.  
  870. Z       := 1;
  871. X       := 1;
  872. PassStr :='';
  873. S_Enter := True;
  874.  
  875. Repeat
  876.  
  877.     If  S_Enter Then
  878.         Begin
  879.     Range := 110000;
  880.     For X := 3 to 14 Do
  881.         Begin
  882.         For Y := 1 To 12 Do
  883.             Begin
  884.             If ((X=3) And (Months[Y] > Range)) Or
  885.                ((X>3) And (Months[Y] >=Range)) Then
  886.                Begin
  887.                TextColor(Y+1);
  888.                PassStr := '▒▒▒';
  889.                End
  890.             Else
  891.                Begin
  892.                PassStr := '   ';
  893.                TextColor(15);
  894.                End;
  895.  
  896.             GoToXy(8+(Y*4),X);
  897.  
  898.             Write(PassStr);
  899.             End;
  900.         If  X > 3 then
  901.             Range := Range - 10000;
  902.         End;
  903.  
  904.     X := 1;
  905.     End;
  906.  
  907.    SaveWindow;
  908.    PassStr := '';
  909.  
  910.    Str(Months[Mth]:6,PassStr);
  911.  
  912.    ReadWindowField('',4,Row,(Col*11)+4,0,6,7,0,PassStr);
  913.  
  914.    Val(PassStr,Months[Mth],Y);
  915.  
  916.    If  S_Tab Then
  917.        Begin
  918.        If  S_Shift Then
  919.            Begin
  920.            Dec(Col);
  921.            Dec(Mth);
  922.            If  Col < 0 Then
  923.                Begin
  924.                Col := 5;
  925.                Mth := 6;
  926.                If  Row = 19 then
  927.                    Row := 18
  928.                Else
  929.                    Begin
  930.                    Row := 19;
  931.                    Mth := 12;
  932.                    End;
  933.                End;
  934.            End
  935.        Else
  936.            Begin
  937.            Inc(Col);
  938.            Inc(Mth);
  939.            If  Col > 5 Then
  940.                Begin
  941.                Col := 0;
  942.                Mth := 1;
  943.                If  Row = 19 then
  944.                    Row := 18
  945.                Else
  946.                    Begin
  947.                    Row := 19;
  948.                    Mth := 7;
  949.                    End;
  950.                End;
  951.            End;
  952.        End;
  953.  
  954.  
  955.  
  956.  
  957. Until S_Esc;
  958.  
  959. EraseWindow('',4);
  960.  
  961. S_ReSetKeyFlags;
  962. S_ReSetMouseFlags;
  963. S_SetMouseEvent('01000000');
  964. S_ShowMouse;
  965. End;
  966.  
  967.  
  968.  
  969.  
  970.  
  971.  
  972.  
  973.  
  974.  
  975.  
  976.  
  977.  
  978.  
  979.  
  980.  
  981.  
  982.  
  983. Procedure OpenAndShutFiftyWindows;
  984. Begin
  985.  
  986. PauseWindowUpdates(False);
  987. RandomWindows(50);
  988.  
  989. PopWindow('',1);
  990. PopWindow('',2);
  991.  
  992. For X := 4 to 53 Do OpenWindow('',X);
  993.  
  994. PopWindow('',53);
  995. ClearWindow('',53,0,0);
  996. WriteLn('** Press Any Key To Continue **');
  997.  
  998. S_NextKey;
  999.  
  1000. For X := 53 DownTo 4 Do ShutWindow('',X);
  1001.  
  1002. PauseWindowUpdates(True);
  1003. For X := 4 to 53     Do EraseWindow('',X);
  1004.  
  1005. End;
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020. Procedure MoveAWindow;
  1021. Begin
  1022. BuildOneWindow(4,10,10,40,6);
  1023. WriteWindowLine('',4,1,W_Off,0,0,0,'A windows can be moved to any location');
  1024. WriteWindowLine('',4,2,W_Off,0,0,0,'on the screen by using the MOVEWINDOW');
  1025. WriteWindowLine('',4,3,W_Off,0,0,0,'statement......');
  1026. WriteWindowLine('',4,4,W_Off,0,0,0,'');
  1027. WriteWindowLine('',4,5,W_Off,0,0,0,'Each Time you press the Enter Key I will');
  1028. WriteWindowLine('',4,6,W_Off,0,0,0,'MOVE this window.. Press ESC to Quit');
  1029.  
  1030. PauseWindowUpdates(False);
  1031. S_HideMouse;
  1032. S_SetMouseEvent('00000000');
  1033. OpenWindow('',4);
  1034.  
  1035. Repeat
  1036.   S_NextKey;
  1037.   If  S_Enter Then
  1038.       MoveWindow('',4,Random(18),Random(40),'a');
  1039. Until S_Esc;
  1040.  
  1041. EraseWindow('',4);
  1042. PauseWindowUpdates(True);
  1043. S_ReSetKeyFlags;
  1044. S_ReSetMouseFlags;
  1045. S_SetMouseEvent('01000000');
  1046. S_ShowMouse;
  1047. End;
  1048.  
  1049.  
  1050.  
  1051.  
  1052.  
  1053.  
  1054.  
  1055.  
  1056.  
  1057.  
  1058.  
  1059.  
  1060. Procedure DragAWindow;
  1061. Var Row,Col:Integer;
  1062. Begin
  1063. Row := 3;
  1064. Col := 10;
  1065. BuildOneWindow(4,Row,Col,40,6);
  1066. WriteWindowLine('',4,1,W_Off,0,0,0,'"DRAGGING" windows around on the screen');
  1067. WriteWindowLine('',4,2,W_Off,0,0,0,'is easy using the MOVEWINDOW statement');
  1068. WriteWindowLine('',4,3,W_Off,0,0,0,'and specifying rows and columns. Use the');
  1069. WriteWindowLine('',4,4,W_Off,0,0,0,'keypad keys to move this window or hold ');
  1070. WriteWindowLine('',4,5,W_Off,0,0,0,'the left mouse button down and drag it..');
  1071. WriteWindowLine('',4,6,W_Off,0,0,0,'------------ Pess ESC to Quit-----------');
  1072.  
  1073. PauseWindowUpdates(False);
  1074. OpenWindow('',4);
  1075.  
  1076. Repeat
  1077.   S_NextKey;
  1078.   If  S_MouseEvent Then
  1079.       Begin
  1080.       S_SetMouseEvent('10100000');
  1081.       S_AnalizeMouse;
  1082.       Repeat
  1083.          MoveWindow('',4,S_MsRow,S_MsCol,'a'); {a = Absolute screen location}
  1084.          S_NextKey;
  1085.          If  S_MouseEvent Then S_AnalizeMouse;
  1086.       Until S_MsLeftReleased;
  1087.       S_SetMouseEvent('01000000');
  1088.       S_ReSetMouseFlags;
  1089.       End
  1090.   Else
  1091.       Begin
  1092.       Row := 0;
  1093.       Col := 0;
  1094.       If  (S_Up)   Or (S_PgUp) Or (S_Home)  Then Row := -1;
  1095.       If  (S_Down) Or (S_PgDn) Or (S_End)   Then Row :=  1;;
  1096.       If  (S_Left) Or (S_Home) Or (S_End)   Then Col := -1;
  1097.       If  (S_Right)Or (S_PgUp) Or (S_PgDn)  Then Col :=  1;
  1098.  
  1099.       MoveWindow('',4,Row,Col,'r'); {r = Relative screen location}
  1100.       End;
  1101.  
  1102. Until S_Esc;
  1103.  
  1104. EraseWindow('',4);
  1105. PauseWindowUpdates(True);
  1106. S_ReSetKeyFlags;
  1107. S_ReSetMouseFlags;
  1108. End;
  1109.  
  1110.  
  1111.  
  1112.  
  1113.  
  1114.  
  1115.  
  1116.  
  1117.  
  1118.  
  1119.  
  1120.  
  1121.  
  1122.  
  1123.  
  1124.  
  1125.  
  1126.  
  1127. Procedure MoveSeveralWindows;
  1128. Var Row,Col:Integer;
  1129. Begin
  1130. RandomWindows(10);
  1131. Row := 20;
  1132. Col := 1;
  1133. BuildOneWindow(14,20,1,78,3);
  1134. WriteWindowLine('',14,1,W_Off,0,0,0,
  1135. 'Turbo ScrEdit allows you to perform many window functions concurrently on the');
  1136. WriteWindowLine('',14,2,W_Off,0,0,0,
  1137. 'screen with one or more windows.  Press Enter to see how smoothly 10 windows');
  1138. WriteWindowLine('',14,3,W_Off,0,0,0,
  1139. 'can be moved at the same time.. <ESC> to exit  <ENTER> for demo.');
  1140.  
  1141. PauseWindowUpdates(False);
  1142. for X := 4 to 14 Do
  1143.     OpenWindow('',X);
  1144.  
  1145. Repeat
  1146.   S_NextKey;
  1147.   If S_MouseEvent then S_AnalizeMouse;
  1148.  
  1149.   If S_Enter Then
  1150.      Begin
  1151.      For Z := 1 to 2 Do
  1152.          Begin
  1153.          For Y := 1 to 20 Do
  1154.              Begin
  1155.              PauseWindowUpdates(True);
  1156.              For X := 4 to 13 Do
  1157.                  Begin
  1158.                  If  (X Mod 4)=0 Then MoveWindow('',X,-1,0,'r');
  1159.                  If  (X Mod 4)=1 Then MoveWindow('',X,0,-3,'r');
  1160.                  If  (X Mod 4)=2 Then MoveWindow('',X,1,0,'r');
  1161.                  If  (X Mod 4)=3 Then MoveWindow('',X,0,4,'r');
  1162.                  End;
  1163.              PauseWindowUpdates(False);
  1164.              End;
  1165.          For Y := 1 to 20 Do
  1166.              Begin
  1167.              PauseWindowUpdates(True);
  1168.              For X := 4 to 13 Do
  1169.                  Begin
  1170.                  If  (X Mod 4)=0 Then MoveWindow('',X,1,0,'r');
  1171.                  If  (X Mod 4)=1 Then MoveWindow('',X,0,4,'r');
  1172.                  If  (X Mod 4)=2 Then MoveWindow('',X,-1,0,'r');
  1173.                  If  (X Mod 4)=3 Then MoveWindow('',X,0,-3,'r');
  1174.                  End;
  1175.              PauseWindowUpdates(False);
  1176.              End;
  1177.          End;
  1178.      End;
  1179.  
  1180. ClearWindow('',14,0,0);
  1181. WriteWindowLine('',14,2,W_Off,0,0,0,
  1182. 'Press ENTER again to repeat or ESC to exit back to the menu... ');
  1183.  
  1184. Until S_Esc;
  1185. For X := 4 to 14 Do EraseWindow('',X);
  1186. PauseWindowUpdates(True);
  1187. S_ReSetKeyFlags;
  1188. S_ReSetMouseFlags;
  1189. End;
  1190.  
  1191.  
  1192.  
  1193.  
  1194.  
  1195.  
  1196.  
  1197.  
  1198.  
  1199.  
  1200.  
  1201.  
  1202.  
  1203.  
  1204.  
  1205.  
  1206.  
  1207. Procedure WriteToWindowLines;
  1208. Var Row    : Integer;
  1209.     LineIn : String;
  1210.     Texts  : String;
  1211.     PassStr: S_Str80;
  1212. Begin
  1213. S_HideMouse;
  1214. S_SetMouseEvent('00000000');
  1215.  
  1216. BuildOneWindow(4,20,1,78,4);
  1217. BuildOneWindow(5,10,1,78,6);
  1218.  
  1219. WriteWindowLine('',4,1,W_Off,0,0,0,
  1220. 'Enter a line number and a string of text to be written to the specified line');
  1221. WriteWindowLine('',4,2,W_Off,0,0,0,
  1222. 'in the window above.. Press <ESC> to exit...................................');
  1223. WriteWindowLine('',4,3,W_Off,0,0,0,
  1224. 'Line Number     Text:');
  1225.  
  1226. WriteWindowLine('',5,1,W_Off,0,0,0,'1 -');
  1227. WriteWindowLine('',5,2,W_Off,0,0,0,'2 -');
  1228. WriteWindowLine('',5,3,W_Off,0,0,0,'3 -');
  1229. WriteWindowLine('',5,4,W_Off,0,0,0,'4 -');
  1230. WriteWindowLine('',5,5,W_Off,0,0,0,'5 -');
  1231. WriteWindowLine('',5,6,W_Off,0,0,0,'6 -');
  1232.  
  1233. OpenWindow('',4);
  1234. OpenWindow('',5);
  1235.  
  1236. PauseWindowUpdates(False);
  1237. S_SetCursor(S_Bold);
  1238. Repeat
  1239.  
  1240.      PassStr := '';
  1241.      ReadWindowField('',4,3,13,0,1,7,0,PassStr);
  1242.      LineIn := PassStr;
  1243.  
  1244.      If  Not S_Esc Then
  1245.          Begin
  1246.          Val(PassStr,Row,x);
  1247.          If  Row In [1..6] Then
  1248.              Begin
  1249.              WriteWindowLine('',4,4,W_Off,0,0,0,' ');
  1250.              PassStr := '';
  1251.              ReadWindowField('',4,3,23,9,54,7,0,PassStr);
  1252.  
  1253.              PassStr := LineIn + ' - ' + PassStr;
  1254.              WriteWindowLine('',5,Row,W_Off,0,0,0,PassStr);
  1255.              End
  1256.          Else
  1257.              WriteWindowLine('',4,4,W_Off,0,Red,Yellow,
  1258.                   '**** ERROR ****  WindowField Must be in range of 1 to 6..');
  1259.          End;
  1260. Until S_Esc;
  1261.  
  1262. S_SetCursor(S_OFF);
  1263. EraseWindow('',4);
  1264. EraseWindow('',5);
  1265. S_ShowMouse;
  1266. S_SetMouseEvent('01000000');
  1267.  
  1268. PauseWindowUpdates(True);
  1269. S_ReSetKeyFlags;
  1270. S_ReSetMouseFlags;
  1271. End;
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286.  
  1287.  
  1288.  
  1289.  
  1290.  
  1291. Procedure WritingWithScrolling;
  1292. Var PassStr: S_Str80;
  1293. Const
  1294.  Message : Array[1..14] of S_Str80 =
  1295.            ('..................................................',
  1296.             'With Turbo ScrEdit Windows you can turn on scrol- ',
  1297.             'ling and have a specified number of lines scroll  ',
  1298.             'up in the window before the new line is written. ',
  1299.             'PRESS ENTER for a demonstration.',
  1300.             '..................................................',
  1301.  
  1302.             'Turbo ScrEdit Windows adds a new twist by allowing',
  1303.             'you specify any number of lines in the window that',
  1304.             'are to be scrolled DOWN in the window before the ',
  1305.             'new line is written. PRESS ENTER to continue.',
  1306.  
  1307.             'You can use these features to write and scroll',
  1308.             'text independently in more than one area of a  ',
  1309.             'window at the same time.. You can even write to',
  1310.             'more than one window at a time.. PRESS ENTER');
  1311.  
  1312. Begin
  1313. S_HideMouse;
  1314. S_SetMouseEvent('00000000');
  1315.  
  1316. BuildOneWindow(4,10,1 ,50,14);
  1317. BuildOneWindow(5,5 ,15,50,14);
  1318. BuildOneWindow(6,1 ,30,50,14);
  1319.  
  1320. PauseWindowUpdates(False);
  1321. Popwindow ('',5);
  1322. OpenWindow('',4);
  1323. OpenWindow('',5);
  1324. OpenWindow('',6);
  1325.  
  1326. PassStr[0] := #80;
  1327.  
  1328. For X := 1 to 6 Do
  1329.     Begin
  1330.     PauseWindowUpdates(True);
  1331.     WriteWindowLine('',4,14,W_Up,0,Black,White,Message[X]);
  1332.     WriteWindowLine('',5,14,W_Up,0,Black,White,Message[X]);
  1333.     WriteWindowLine('',6,14,W_Up,0,Black,White,Message[X]);
  1334.     PauseWindowUpdates(False);
  1335.     End;
  1336.  
  1337. S_NextKey;
  1338.  
  1339. For X := 1 to 8 Do
  1340.    Begin
  1341.    PauseWindowUpdates(True);
  1342.    FillChar(PassStr[1],80,32);
  1343.    FillChar(PassStr[X],5,64+X);
  1344.    WriteWindowLine('',4,14,W_Up,0,0,0,PassStr);
  1345.    WriteWindowLine('',5,14,W_Up,0,0,0,PassStr);
  1346.    WriteWindowLine('',6,14,W_Up,0,0,0,PassStr);
  1347.    PauseWindowUpdates(False);
  1348.    End;
  1349.  
  1350. For X := 7 to 10 Do
  1351.    Begin
  1352.    PauseWindowUpdates(True);
  1353.    WriteWindowLine('',4,5,W_Up,3,Black,White,Message[X]);
  1354.    WriteWindowLine('',5,5,W_Up,3,Black,White,Message[X]);
  1355.    WriteWindowLine('',6,5,W_Up,3,Black,White,Message[X]);
  1356.    PauseWindowUpdates(False);
  1357.    End;
  1358.  
  1359. S_NextKey;
  1360.  
  1361. For X := 1 to 4 Do
  1362.    Begin
  1363.    PauseWindowUpdates(True);
  1364.    FillChar(PassStr[1],80,32);
  1365.    FillChar(PassStr[X],5,64+X);
  1366.    WriteWindowLine('',4,1,W_Down,0,0,0,PassStr);
  1367.    WriteWindowLine('',5,1,W_Down,0,0,0,PassStr);
  1368.    WriteWindowLine('',6,1,W_Down,0,0,0,PassStr);
  1369.    PauseWindowUpdates(False);
  1370.    End;
  1371.  
  1372. For X := 10 to 14 Do
  1373.    Begin
  1374.    PauseWindowUpdates(True);
  1375.    WriteWindowLine('',4,9,W_Up,3,Black,White,Message[X]);
  1376.    WriteWindowLine('',5,9,W_Up,3,Black,White,Message[X]);
  1377.    WriteWindowLine('',6,9,W_Up,3,Black,White,Message[X]);
  1378.    PauseWindowUpdates(False);
  1379.    End;
  1380.  
  1381. S_NextKey;
  1382.  
  1383. For X := 1 to 45 Do
  1384.    Begin
  1385.    FillChar(PassStr[1],80,32);
  1386.    FillChar(PassStr[X],5,64+X);
  1387.    PausewindowUpdates(True);
  1388.    WriteWindowLine('',4,4, W_Up,  4,0,0,PassStr);
  1389.    WriteWindowLine('',4,11,W_Down,4,0,0,PassStr);
  1390.    WriteWindowLine('',5,4, W_Up,  4,0,0,PassStr);
  1391.    WriteWindowLine('',5,11,W_Down,4,0,0,PassStr);
  1392.    WriteWindowLine('',6,4, W_Up,  4,0,0,PassStr);
  1393.    WriteWindowLine('',6,11,W_Down,4,0,0,PassStr);
  1394.    PauseWindowUpdates(False);
  1395.    End;
  1396.  
  1397. For X := 45 downto 1 Do
  1398.    Begin
  1399.    FillChar(PassStr[1],80,32);
  1400.    FillChar(PassStr[X],5,64+X);
  1401.    PausewindowUpdates(True);
  1402.    WriteWindowLine('',4,4, W_Up,  4,0,0,PassStr);
  1403.    WriteWindowLine('',4,11,W_Down,4,0,0,PassStr);
  1404.    WriteWindowLine('',5,4, W_Up,  4,0,0,PassStr);
  1405.    WriteWindowLine('',5,11,W_Down,4,0,0,PassStr);
  1406.    WriteWindowLine('',6,4, W_Up,  4,0,0,PassStr);
  1407.    WriteWindowLine('',6,11,W_Down,4,0,0,PassStr);
  1408.    PauseWindowUpdates(False);
  1409.    End;
  1410.  
  1411. S_NextKey;
  1412.  
  1413. EraseWindow('',4);
  1414. EraseWindow('',5);
  1415. EraseWindow('',6);
  1416.  
  1417. S_ShowMouse;
  1418. S_SetMouseEvent('01000000');
  1419. PauseWindowUpdates(True);
  1420. S_ReSetKeyFlags;
  1421. S_ReSetMouseFlags;
  1422. End;
  1423.  
  1424.  
  1425.  
  1426.  
  1427.  
  1428.  
  1429.  
  1430.  
  1431.  
  1432.  
  1433.  
  1434.  
  1435.  
  1436.  
  1437.  
  1438.  
  1439.  
  1440.  
  1441. Procedure ReadingWindowLines;
  1442. Var PassStr : S_Str80;
  1443. Begin
  1444. S_HideMouse;
  1445. S_SetMouseEvent('00000000');
  1446.  
  1447. BuildOneWindow(4,5,1,30,10);
  1448. BuildOneWindow(5,5,50,30,10);
  1449. BuildOneWindow(6,18,20,40,4);
  1450.  
  1451. OpenWindow('',4);
  1452. OpenWindow('',5);
  1453. OpenWindow('',6);
  1454.  
  1455. PopWindow('',5);
  1456.  
  1457. PauseWindowUpdates(False);
  1458.  
  1459. TextColor(Yellow);
  1460. TextBackGround(Black);
  1461.  
  1462. ClrScr;
  1463.  
  1464. PassStr[0] := #28;
  1465.  
  1466. For X := 1 to 10 Do
  1467.     Begin
  1468.     FillChar(PassStr[1],28,64+X);
  1469.     WriteLn(PassStr);
  1470.     End;
  1471.  
  1472. SaveWindow;
  1473. PopWindow('',5);
  1474.  
  1475. WriteWindowLine('',6,1,W_Off,0,0,0,'Each time you press the ENTER key I  ');
  1476. WriteWindowLine('',6,2,W_Off,0,0,0,'will read a line of text from the ');
  1477. WriteWindowLine('',6,3,W_Off,0,0,0,'window on the RIGHT and write it to ');
  1478. WriteWindowLine('',6,4,W_Off,0,0,0,'window on the left.... ESC to EXIT');
  1479.  
  1480. X := 0;
  1481.  
  1482. Repeat
  1483.  
  1484.    S_NextKey;
  1485.    If  S_Enter Then
  1486.        Begin
  1487.        Inc(X);
  1488.        If X > 9 Then
  1489.           Begin
  1490.           ClearWindow('',4,0,0);
  1491.           X := 1;
  1492.           End;
  1493.        WriteWindowLine('',4,X,W_OFF,0,0,0,ReadWindowLine('',5,X));
  1494.        End;
  1495.  
  1496. Until S_Esc;
  1497.  
  1498. EraseWindow('',4);
  1499. EraseWindow('',5);
  1500. EraseWindow('',6);
  1501.  
  1502. S_ShowMouse;
  1503. S_SetMouseEvent('01000000');
  1504. PauseWindowUpdates(True);
  1505. S_ReSetKeyFlags;
  1506. S_ReSetMouseFlags;
  1507.  
  1508. End;
  1509.  
  1510.  
  1511.  
  1512.  
  1513.  
  1514.  
  1515.  
  1516.  
  1517.  
  1518.  
  1519.  
  1520.  
  1521.  
  1522.  
  1523.  
  1524.  
  1525.  
  1526.  
  1527.  
  1528. Procedure ShuffleWindows;
  1529. Var PassStr : S_Str80;
  1530.     FromWindow,
  1531.     ToLevel : Integer;
  1532. Begin
  1533.  
  1534. S_HideMouse;
  1535. S_SetMouseEvent('00000000');
  1536. PauseWindowUpdates(False);
  1537.  
  1538. Z := 1;
  1539. For X := 4 to 9 do
  1540.     Begin
  1541.     Str(X-3,PassStr);
  1542.     PassStr := PassStr + '╘═══════════╛ Window '+PassStr+' ╘═══════════╛'+ PassStr;
  1543.     WindowName     := PassStr;
  1544.     WindowNamePos  := 3;
  1545.     WindowFoot     := PassStr;
  1546.     WindowFootPos  := 3;
  1547.     BuildOneWindow(X,Z*2,((Z-1)*6)+1,40,6);
  1548.     Str(X,PassStr);
  1549.     PassStr :=
  1550.        '<'+PassStr+'> --------------Level------------- <'+PassStr+'>';
  1551.     WriteWindowLine('',X,1,W_Off,0,0,0,PassStr);
  1552.     WriteWindowLine('',X,6,W_Off,0,0,0,PassStr);
  1553.     Inc(Z);
  1554.     OpenWindow('',X);
  1555.     End;
  1556.  
  1557. WindowName     := '';
  1558. WindowNamePos  := 0;
  1559. WindowFoot     := '';
  1560. WindowFootPos  := 0;
  1561.  
  1562. BuildOneWindow(10,22,1,78,2);
  1563.  
  1564. OpenWindow('',10);
  1565.  
  1566. PauseWindowUpdates(False);
  1567.  
  1568. X       := 1;
  1569. PassStr :='';
  1570.  
  1571. Repeat
  1572.    If PassStr > '' Then
  1573.       WriteWindowLine('',10,2,W_OFF,0,RED,YELLOW,PassStr)
  1574.    Else
  1575.       WriteWindowLine('',10,2,W_OFF,0,0,0,PassStr);
  1576.  
  1577.  
  1578.    If X = 1 Then
  1579.       Begin
  1580.       PassStr := '';
  1581.       WriteWindowLine('',10,1,W_OFF,0,0,0,
  1582.         'ESC to EXIT or select the WINDOW to be pushed [    ]');
  1583.       ReadWindowField('',10,1,48,0,2,7,0,PassStr);
  1584.       Val(PassStr,FromWindow,Y);
  1585.       If  FromWindow In [1..6] Then
  1586.           Begin
  1587.           Inc(X);
  1588.           Inc(FromWindow,3);
  1589.           PassStr := '';
  1590.           End
  1591.       Else
  1592.           PassStr := '*** ERROR *** Window number must be in range of 1..6';
  1593.       End;
  1594.  
  1595.    If X = 2 Then
  1596.       Begin
  1597.       PassStr := '';
  1598.       WriteWindowLine('',10,1,W_OFF,0,0,0,
  1599.         'Select the stack LEVEL where this window is to be inserted [    ]');
  1600.       ReadWindowField('',10,1,61,0,2,7,0,PassStr);
  1601.       Val(PassStr,ToLevel,Y);
  1602.       If  ToLevel In [4..9] Then
  1603.           Begin
  1604.           Inc(X);
  1605.           PassStr := '';
  1606.           End
  1607.       Else
  1608.           PassStr := '*** ERROR *** Insert LEVEL must be in range of 4..9';
  1609.       End;
  1610.  
  1611.    If X = 3 Then
  1612.       Begin
  1613.       PauseWindowUpdates(True);
  1614.       PushWindow('',FromWindow,ToLevel);
  1615.       For X := 4 to 9 do
  1616.           Begin
  1617.           Y := WindAry[X].Handel;
  1618.           Str(X,PassStr);
  1619.           PassStr := '<'+PassStr
  1620.                    + '> --------------Level------------- <'+PassStr+'>';
  1621.           WriteWindowLine('',Y,1,W_Off,0,0,0,PassStr);
  1622.           WriteWindowLine('',Y,6,W_Off,0,0,0,PassStr);
  1623.           End;
  1624.       PauseWindowUpdates(False);
  1625.       PassStr := '';
  1626.       X := 1;
  1627.       End;
  1628.  
  1629.  
  1630. Until S_Esc;
  1631.  
  1632.  
  1633. for X := 4 to 10 Do EraseWindow('',X);
  1634.  
  1635. WindowName     := '';
  1636. WindowNamePos  := 0;
  1637. WindowFoot     := '';
  1638. WindowFootPos  := 0;
  1639.  
  1640. S_ShowMouse;
  1641. S_SetMouseEvent('01000000');
  1642. PauseWindowUpdates(True);
  1643. S_ReSetKeyFlags;
  1644. S_ReSetMouseFlags;
  1645.  
  1646. End;
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656.  
  1657.  
  1658.  
  1659.  
  1660.  
  1661.  
  1662.  
  1663.  
  1664.  
  1665.  
  1666. Procedure PopWindowDemo;
  1667. Var PassStr : S_Str80;
  1668.     FromWindow,
  1669.     ToLevel : Integer;
  1670. Begin
  1671.  
  1672. S_HideMouse;
  1673. S_SetMouseEvent('00000000');
  1674. PauseWindowUpdates(False);
  1675.  
  1676. Z := 1;
  1677.  
  1678. BuildOneWindow(4,22,1,78,2);
  1679.  
  1680. For X := 5 to 10 do
  1681.     Begin
  1682.     Str(X-4,PassStr);
  1683.     PassStr :=
  1684.       PassStr + '╘═══════════╛ Window '+PassStr+' ╘═══════════╛'+ PassStr;
  1685.     WindowName     := PassStr;
  1686.     WindowNamePos  := 3;
  1687.     WindowFoot     := PassStr;
  1688.     WindowFootPos  := 3;
  1689.     BuildOneWindow(X,Z*2,((Z-1)*6)+1,40,6);
  1690.     Str(X,PassStr);
  1691.     PassStr :=
  1692.        '<'+PassStr+'> --------------Level------------- <'+PassStr+'>';
  1693.     WriteWindowLine('',X,1,W_Off,0,0,0,PassStr);
  1694.     WriteWindowLine('',X,6,W_Off,0,0,0,PassStr);
  1695.     Inc(Z);
  1696.     OpenWindow('',X);
  1697.     End;
  1698.  
  1699. WindowName     := '';
  1700. WindowNamePos  := 0;
  1701. WindowFoot     := '';
  1702. WindowFootPos  := 0;
  1703.  
  1704. OpenWindow('',4);
  1705.  
  1706. PauseWindowUpdates(False);
  1707.  
  1708. X       := 1;
  1709. PassStr :='';
  1710.  
  1711. Repeat
  1712.    If PassStr > '' Then
  1713.       WriteWindowLine('',4,2,W_OFF,0,RED,YELLOW,PassStr)
  1714.    Else
  1715.       WriteWindowLine('',4,2,W_OFF,0,0,0,PassStr);
  1716.  
  1717.  
  1718.    If X = 1 Then
  1719.       Begin
  1720.       PassStr := '';
  1721.       WriteWindowLine('',4,1,W_OFF,0,0,0,
  1722.         'ESC to EXIT or Select the window to be Popped [    ]');
  1723.       ReadWindowField('',4,1,48,0,2,7,0,PassStr);
  1724.       Val(PassStr,FromWindow,Y);
  1725.       If  FromWindow In [1..6] Then
  1726.           Begin
  1727.           PushWindow('',4,4);
  1728.           Inc(X);
  1729.           Inc(FromWindow,4);
  1730.           PassStr := '';
  1731.           End
  1732.       Else
  1733.           PassStr := '*** ERROR *** Window number must be in range of 1..6';
  1734.       End;
  1735.  
  1736.    If X = 2 Then
  1737.       Begin
  1738.       PauseWindowUpdates(True);
  1739.       PopWindow('',FromWindow);
  1740.       For X := 5 to 10 do
  1741.           Begin
  1742.           Y := WindAry[X].Handel;
  1743.           Str(X,PassStr);
  1744.           PassStr := '<'+PassStr
  1745.                    + '> --------------Level------------- <'+PassStr+'>';
  1746.           WriteWindowLine('',Y,1,W_Off,0,0,0,PassStr);
  1747.           WriteWindowLine('',Y,6,W_Off,0,0,0,PassStr);
  1748.           End;
  1749.       PauseWindowUpdates(False);
  1750.       PassStr := '';
  1751.       X := 1;
  1752.       End;
  1753.  
  1754.  
  1755. Until S_Esc;
  1756.  
  1757.  
  1758. for X := 4 to 10 Do EraseWindow('',X);
  1759.  
  1760. WindowName     := '';
  1761. WindowNamePos  := 0;
  1762. WindowFoot     := '';
  1763. WindowFootPos  := 0;
  1764.  
  1765. S_ShowMouse;
  1766. S_SetMouseEvent('01000000');
  1767. PauseWindowUpdates(True);
  1768. S_ReSetKeyFlags;
  1769. S_ReSetMouseFlags;
  1770.  
  1771. End;
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777.  
  1778.  
  1779.  
  1780.  
  1781.  
  1782.  
  1783.  
  1784.  
  1785.  
  1786.  
  1787.  
  1788.  
  1789.  
  1790.  
  1791. Procedure ChangingWindowBackgrounds;
  1792. Var NewScreen    : Array[1..4000] of Char;
  1793.     HS           : Array[1..24,1..80,1..2] of Char Absolute NewScreen;
  1794. const
  1795. Texts : Array[1..6] of String[44] =
  1796.         ('  TURBO ╔══╗ (tm)      ╔══╗    ╥       1.6   ',
  1797.          '        ║              ║       ║   ─╥─       ',
  1798.          '        ╚══╗ ╔══╗ ╔══╗ ╠═   ╔══╣ ╥  ║        ',
  1799.          '           ║ ║    ╠═╦╝ ║    ║  ║ ║  ║        ',
  1800.          '        ╚══╝ ╚══╝ ╨ ╨  ╚══╝ ╚══╝ ╨  ╨        ',
  1801.          ' The professional`s screen developement tool ');
  1802.  
  1803. Begin
  1804. X := 2;
  1805. FillChar(NewScreen,4000,176);
  1806. Repeat
  1807.   NewScreen[X] := #02;
  1808.   Inc(X,2);
  1809. Until X > 4000;
  1810. Y := 15;
  1811. For X := 1 to 44 Do
  1812.    Begin
  1813.    HS[Y  ,X+19,1] := Texts[1][X];
  1814.    HS[Y+1,X+19,1] := Texts[2][X];
  1815.    HS[Y+2,X+19,1] := Texts[3][X];
  1816.    HS[Y+3,X+19,1] := Texts[4][X];
  1817.    HS[Y+4,X+19,1] := Texts[5][X];
  1818.    HS[Y+5,X+19,1] := Texts[6][X];
  1819.    End;
  1820.  
  1821. S_HideMouse;
  1822. S_SetMouseEvent('00000000');
  1823.  
  1824. BuildOneWindow(4,22,1,78,1);
  1825. WriteWindowLine('',4,1,W_Off,0,0,0,
  1826.    ' Press ESC to exit or "S" to swap screen backgrounds..');
  1827. PauseWindowUpdates(False);
  1828. OpenWindow('',4);
  1829.  
  1830. X := 1;
  1831. Repeat
  1832.  
  1833.    S_NextKey;
  1834.  
  1835.    If  (UpCase(S_Ch) = 'S') Then
  1836.        If  X = 1 Then
  1837.            Begin
  1838.            X := 2;
  1839.            ChgWindowBackground(Seg(NewScreen),Ofs(NewScreen),3840);
  1840.            End
  1841.        Else
  1842.            Begin
  1843.            X := 1;
  1844.            ChgWindowBackground(Seg(HoldScreen),Ofs(HoldScreen),3840);
  1845.            End;
  1846.  
  1847. Until S_Esc;
  1848.  
  1849. ChgWindowBackground(Seg(HoldScreen),Ofs(HoldScreen),3840);
  1850. EraseWindow('',4);
  1851. S_ShowMouse;
  1852. S_SetMouseEvent('01000000');
  1853. PauseWindowUpdates(True);
  1854. S_ReSetKeyFlags;
  1855. S_ReSetMouseFlags;
  1856. End;
  1857.  
  1858.  
  1859.  
  1860.  
  1861.  
  1862.  
  1863.  
  1864.  
  1865.  
  1866.  
  1867.  
  1868.  
  1869.  
  1870.  
  1871.  
  1872.  
  1873.  
  1874.  
  1875.  
  1876. Procedure StandardIO;
  1877. Begin
  1878. S_HideMouse;
  1879. S_SetMouseEvent('00000000');
  1880.  
  1881. BuildOneWindow(4,5,10,60,14);
  1882.  
  1883. PauseWindowUpdates(False);
  1884.  
  1885. OpenWindow('',4);
  1886.  
  1887. S_WorkStr := '***** Standard I/O *****';
  1888. S_SetCursor(S_Bold);
  1889.  
  1890. Repeat
  1891.  
  1892.    For X := 0 to 15 Do
  1893.        Begin
  1894.        TextColor(X);
  1895.        Write('    <' +S_WorkStr + '>');
  1896.        End;
  1897.  
  1898.    WriteLn;
  1899.    WriteLn;
  1900.    WriteLN('...........................................................');
  1901.    WriteLn('  Type "quit" to exit or  type something and Press ENTER.');
  1902.    WriteLN('...........................................................');
  1903.    ReadLn(S_WorkStr);
  1904.  
  1905. Until S_UpShiftedStr(S_WorkStr) = 'QUIT';
  1906.  
  1907. S_SetCursor(S_Off);
  1908.  
  1909. EraseWindow('',4);
  1910. S_ShowMouse;
  1911. S_SetMouseEvent('01000000');
  1912. PauseWindowUpdates(True);
  1913. S_ReSetKeyFlags;
  1914. S_ReSetMouseFlags;
  1915. End;
  1916.  
  1917.  
  1918.  
  1919.  
  1920.  
  1921.  
  1922.  
  1923.  
  1924.  
  1925.  
  1926.  
  1927.  
  1928.  
  1929.  
  1930.  
  1931.  
  1932.  
  1933.  
  1934.  
  1935.  
  1936. Procedure FastVideoCheck;
  1937. Begin
  1938. With ConfigRec Do
  1939.    If  Not S_FastVideo Then
  1940.        Begin
  1941.        WriteWindowLine('',2,1,W_OFF,0,PopUpBarBg,PopUpBarFg
  1942.           ,' Fast video mode is now <ON>');
  1943.        S_FastVideo := True;
  1944.        End
  1945.    Else
  1946.        Begin
  1947.        WriteWindowLine('',2,1,W_OFF,0,PopUpBarBg,PopUpBarFg,
  1948.            ' Fast video mode is now <OFF>');
  1949.        S_FastVideo := False;
  1950.        End;
  1951. End;
  1952.  
  1953.  
  1954.  
  1955.  
  1956.  
  1957. Begin
  1958.  
  1959. S_GetScrMem(Mem[S_Seg:S_Ofs],Mem[Seg(HoldScreen[1]):Ofs(HoldScreen)],4000);
  1960.  
  1961. Randomize;
  1962.  
  1963. S_FastVideo := False;
  1964. S_Cursor  := S_Normal;
  1965. S_Sound   := False;
  1966. S_ShowStatus := False;
  1967. If  Not WindowsInit Then
  1968.     Begin
  1969.     S_Msg := ' Insufficent memeory to use windows.. ';
  1970.     S_NextKey;
  1971.     Halt;
  1972.     End;
  1973.  
  1974. Initialize;
  1975.  
  1976. MainOption      := 1;
  1977. DemoOption      := 1;
  1978. ColorOption     := 1;
  1979.  
  1980. BuildMainMenu;
  1981.  
  1982. S_ActivateMouse;
  1983. S_SetMouseEvent('0100000');
  1984. S_ResetMouseFlags;
  1985. S_ShowMouse;
  1986.  
  1987. DoMouse    := False;
  1988.  
  1989. WindowName     := '';
  1990. WindowNamePos  := 0;
  1991. WindowFoot     := '';
  1992. WindowFootPos  := 0;
  1993.  
  1994.  
  1995.  
  1996. OpenWindow('',Menus[1]);
  1997. Repeat
  1998.  
  1999.     If  MainOption > MenuBarItems Then MainOption := 1;
  2000.     If  MainOption < 1            Then MainOption := MenuBarItems;
  2001.  
  2002.     WorkStr := MenuBarFields[MainOPtion];
  2003.  
  2004.     WritewindowField('',
  2005.                      Menus[1],
  2006.                      1,
  2007.                      Pos(MenuBarFields[MainOption],MenuBarStr)-1,
  2008.                      9,
  2009.                      Length(MenuBarFields[MainOption]),
  2010.                      ConfigRec.MenuLiteBg,
  2011.                      ConfigRec.MenuLiteFg,
  2012.                      0,
  2013.                      0,
  2014.                      WorkStr);
  2015.  
  2016.     GetNextKey;
  2017.  
  2018.     If  (((S_Enter) Or (S_Down)) And (MenuBarLines[MainOption] > 0)) Then
  2019.         WindowActive := True
  2020.     Else
  2021.         WindowActive := False;
  2022.  
  2023.     If  (S_Enter) And (MainOption = 2) Then
  2024.         Begin
  2025.         DataEntryDemo;
  2026.         End;
  2027.  
  2028.     If  WindowActive = True Then
  2029.         Begin
  2030.  
  2031.         If  MainOption = 1  Then
  2032.             Begin
  2033.             PrevOption := 2;
  2034.             LastLine   := DemoOption;
  2035.             End;
  2036.  
  2037.         If  MainOption = 3  Then
  2038.             Begin
  2039.             PrevOption := 3;
  2040.             LastLine   := ColorOption;
  2041.             End;
  2042.  
  2043.         OpenWindow('',Menus[PrevOption]);
  2044.  
  2045.         PauseWindowUpdates(True);
  2046.         S_Enter := False;
  2047.  
  2048.         Repeat
  2049.  
  2050.           WriteWindowLine('',
  2051.                            Menus[PrevOption],
  2052.                            LastLine,
  2053.                            W_Off,
  2054.                            0,
  2055.                            ConfigRec.PopUpBarBg,
  2056.                            ConfigRec.PopUpBarFg,
  2057.                            ReadWindowLine('',Menus[PrevOption],LastLine));
  2058.  
  2059.  
  2060.            If  MainOption = 1 Then
  2061.                If  S_Enter Then
  2062.                    Case LastLine Of
  2063.                       1 : FastVideoCheck;
  2064.                       2 : OpenAndShutFiftyWindows;
  2065.                       3 : MoveAWindow;
  2066.                       4 : DragAWindow;
  2067.                       5 : MoveSeveralWindows;
  2068.                       6 : WriteToWindowLines;
  2069.                       7 : WritingWithScrolling;
  2070.                       8 : ReadingWindowLines;
  2071.                       9 : ShuffleWindows;
  2072.                       10: PopWindowDemo;
  2073.                       11: ChangingWindowBackgrounds;
  2074.                       12: StandardIO;
  2075.                       End;
  2076.  
  2077.            If  MainOption = 3 Then
  2078.                If  S_Enter Then ChangeWindowDemo;
  2079.  
  2080.            PauseWindowUpdates(False);
  2081.  
  2082.            NewLine := 0;
  2083.            GetNextKey;
  2084.  
  2085.            PauseWindowUpdates(True);
  2086.            WriteWindowLine('',
  2087.                            Menus[PrevOption],
  2088.                            LastLine,
  2089.                            W_Off,
  2090.                            0,
  2091.                            ConfigRec.PopUpTextBg,
  2092.                            ConfigRec.PopUpTextFg,
  2093.                            ReadWindowLine('',Menus[PrevOption],LastLine));
  2094.  
  2095.            If  S_Up   Then Dec(LastLine);
  2096.            If  S_Down Then Inc(LastLine);
  2097.  
  2098.            If  LastLine > MenuBarLines[MainOption] Then
  2099.                LastLine := 1;
  2100.            If  LastLine < 1 Then
  2101.                LastLine := MenuBarLines[MainOption];
  2102.  
  2103.            If  NewLine > 0 Then LastLine := NewLine;
  2104.  
  2105.         Until DoMouse Or S_Alt Or S_Left Or S_Right;
  2106.  
  2107.         PauseWindowUpdates(False);
  2108.  
  2109.         If  PrevOption = 2 Then DemoOption  := LastLine;
  2110.         If  PrevOption = 2 Then ColorOption := LastLine;
  2111.  
  2112.         ShutWindow('',Menus[PrevOption]);
  2113.  
  2114.         End;
  2115.  
  2116.     If  S_Left           Then MainOption := MainOption -1;
  2117.     If  S_Tab Or S_Right Then MainOption := MainOption +1;
  2118.  
  2119.     WriteWindowLine('',
  2120.                     Menus[1],
  2121.                     1,
  2122.                     W_Off,
  2123.                     0,
  2124.                     ConfigRec.MenuBarBg,
  2125.                     ConfigRec.MenuBarFg,
  2126.                     MenuBarStr);
  2127.  
  2128. Until (S_Enter) and (MainOption=4);
  2129.  
  2130. S_DisableMouse;
  2131. EraseWindow('',1);
  2132. EraseWindow('',2);
  2133.  
  2134. S_SetCursor(S_Normal);
  2135.  
  2136. End.